package es.tikitaka.actions.estadisticas;

import java.util.List;

import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Begin;
import org.jboss.seam.annotations.End;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.datamodel.DataModel;

import es.tikitaka.dao.EstColegiadoService;
import es.tikitaka.dao.EstEquipoService;
import es.tikitaka.dao.EstJugadorService;
import es.tikitaka.dao.TemporadaService;
import es.tikitaka.domain.Temporada;
import es.tikitaka.domain.equipo.EstEquipo;
import es.tikitaka.domain.jugador.EstJugador;

/**
 * 
 * @author Saúl Domínguez
 * @since 2010
 * @category PFC
 */

@Name("estadisticasAction")
@Scope(ScopeType.CONVERSATION)
public class EstadisticasAction {

	private Temporada temporada;
	private int mode;

	/** Datos para el pichichi */
	private EstJugador pichichi;
	@DataModel("goleadores")
	private List<EstJugador> listGoleadores;
	private EstEquipo eqPichichi;
	@DataModel("eqGoleadores")
	private List<EstEquipo> listEqGoleadores;

	/** Datos para el zamora */
	private EstJugador zamora;
	private EstEquipo eqZamora;
	@DataModel("menosGoleados")
	private List<EstJugador> listGoleados;
	@DataModel("eqMenosGoelados")
	private List<EstEquipo> listEqGoleados;

	/** Datos de las faltas */
	private EstJugador jugMasFaltas;
	@DataModel("faltas")
	private List<EstJugador> listFaltas;
	private EstEquipo eqFatasR;
	@DataModel("eqFaltasR")
	private List<EstEquipo> listEqFaltasR;
	private EstEquipo eqFaltasC;
	@DataModel("eqFaltasC")
	private List<EstEquipo> listEqFaltasC;

	/** Datos de las tarjetas */
	private EstJugador jugMasAmarillas;
	@DataModel("amonestadosAmarilla")
	private List<EstJugador> listAmonestadosAmarilla;
	private EstJugador jugMasRojas;
	@DataModel("amonestadosRoja")
	private List<EstJugador> listAmonestadosRoja;
	private EstJugador jugMasAzules;
	@DataModel("amonestadosAzul")
	private List<EstJugador> listAmonestadosAzul;
	private EstEquipo eqMasAmarillas;
	@DataModel("eqAmonestadosAmarilla")
	private List<EstEquipo> listEqAmonestadosAmarilla;
	private EstEquipo eqMasRojas;
	@DataModel("eqAmonestadosRoja")
	private List<EstEquipo> listEqAmonestadosRoja;
	private EstEquipo eqMasAzul;
	@DataModel("eqAmonestadosAzul")
	private List<EstEquipo> listEqAmonestadosAzul;

	/** Datos de los penaltys */
	private EstJugador jugMasPenaltysC;
	@DataModel("listPenaltysC")
	private List<EstJugador> listPenaltysC;
	private EstJugador jugMasPenaltysL;
	@DataModel("listPenaltysL")
	private List<EstJugador> listPenaltysL;
	private EstEquipo eqMasPenaltysC;
	@DataModel("listEqPenaltysC")
	private List<EstEquipo> listEqPenaltysC;
	private EstEquipo eqMasPenaltysL;
	@DataModel("listEqPenaltysL")
	private List<EstEquipo> listEqPenaltysL;

	private List<Temporada> listaTemporadas;

	@In(create = true)
	private TemporadaService temporadaService;

	@In(create = true)
	private EstJugadorService estJugadorService;

	@In(create = true)
	private EstEquipoService estEquipoService;

	@In(create = true)
	private EstColegiadoService estColegiadoService;

	/**
	 * Constructor por defecto
	 */
	public EstadisticasAction() {
		// TODO Auto-generated constructor stub
	}

	/**
	 * Método para cargar las opciones para consultar estadísticas
	 * 
	 */
	@Begin(join = true)
	public void estadisticas(int mod) {
		temporada = new Temporada();
		listaTemporadas = temporadaService.getList();
		this.mode = mod;
	}

	/**
	 * Método para cargar las opciones según el modo
	 */
	@Begin(join = true)
	public void cargarEstadisticas() {
		if (temporada != null) {
			if (mode == 1) {
				cargarEstadisticasJugador();
			} else if (mode == 2) {
				cargarEstadisticasEquipo();
			} else if (mode == 3) {
				cargarEstadisticasColegiados();
			}
		} else {

		}
	}

	/**
	 * Método para cargar las estadísticas de jugadores
	 */
	@Begin(join = true)
	public void cargarEstadisticasJugador() {
		if (temporada != null) {
			// Pichichi
			listGoleadores = estJugadorService.getListPichichi(temporada);
			if (listGoleadores != null && listGoleadores.size() > 0) {
				pichichi = listGoleadores.remove(0);
			}
			// Zamora
			listGoleados = estJugadorService.getListZamora(temporada);
			if (listGoleados != null && listGoleados.size() > 0) {
				zamora = listGoleados.remove(0);
			}
			// Más faltas
			listFaltas = estJugadorService.getListFaltas(temporada);
			if (listFaltas != null && listFaltas.size() > 0) {
				jugMasFaltas = listFaltas.remove(0);
			}
			// Más amarillas
			listAmonestadosAmarilla = estJugadorService.getListAmonestados(
					temporada, "Tarjeta amarilla");
			if (listAmonestadosAmarilla != null
					&& listAmonestadosAmarilla.size() > 0) {
				jugMasAmarillas = listAmonestadosAmarilla.remove(0);
			}
			// Más rojas
			listAmonestadosRoja = estJugadorService.getListAmonestados(
					temporada, "Tarjeta roja");
			if (listAmonestadosRoja != null && listAmonestadosRoja.size() > 0) {
				jugMasRojas = listAmonestadosRoja.remove(0);
			}
			// Más azules
			listAmonestadosAzul = estJugadorService.getListAmonestados(
					temporada, "Tarjeta azul");
			if (listAmonestadosAzul != null && listAmonestadosAzul.size() > 0) {
				jugMasAzules = listAmonestadosAzul.remove(0);
			}
			// Más penaltis cometidos
			listPenaltysC = estJugadorService
					.getListPenaltysCometidos(temporada);
			if (listPenaltysC != null && listPenaltysC.size() > 0) {
				jugMasPenaltysC = listPenaltysC.remove(0);
			}
			// Más penaltys lanzados
			listPenaltysL = estJugadorService
					.getListPenaltysLanzados(temporada);
			if (listPenaltysL != null && listPenaltysL.size() > 0) {
				jugMasPenaltysL = listPenaltysL.remove(0);
			}
		}
	}

	/**
	 * Método para cargar las estadísticas de equipos
	 */
	@Begin(join = true)
	public void cargarEstadisticasEquipo() {
		if (temporada != null) {
			// Más goleadores
			listEqGoleadores = estEquipoService.getListEqPichichi(temporada);
			eqPichichi = listEqGoleadores.remove(0);
			// Menos goleado
			listEqGoleados = estEquipoService.getListEqZamora(temporada);
			eqZamora = listEqGoleados.remove(0);
			// Mas faltas cometidas
			listEqFaltasC = estEquipoService.getListEqMasFaltasC(temporada);
			eqFaltasC = listEqFaltasC.remove(0);
			// Más faltas recibidas
			listEqFaltasR = estEquipoService.getListEqMasFaltasR(temporada);
			// Más amarillas
			listEqAmonestadosAmarilla = estEquipoService
					.getListEqMasAmonestado(temporada, "Tarjeta amarilla");
			eqMasAmarillas = listEqAmonestadosAmarilla.remove(0);
			// Más rojas
			listEqAmonestadosRoja = estEquipoService.getListEqMasAmonestado(
					temporada, "Tarjeta roja");
			eqMasRojas = listEqAmonestadosRoja.remove(0);
			// Más azules
			listEqAmonestadosAzul = estEquipoService.getListEqMasAmonestado(
					temporada, "Tarjeta azul");
			eqMasAzul = listEqAmonestadosAzul.remove(0);
			// Más penaltis cometidos
			listEqPenaltysC = estEquipoService.getListEqMasPenaltysC(temporada);
			eqMasPenaltysC = listEqPenaltysC.remove(0);
			// Más penaltis lanzados
			listEqPenaltysL = estEquipoService.getListEqMasPenaltysL(temporada);
			eqMasPenaltysL = listEqPenaltysL.remove(0);
		}
	}

	/**
	 * Método para cargar las estadísticas de colegiados
	 */
	@Begin(join = true)
	public void cargarEstadisticasColegiados() {

	}

	public void volver(int mode) {
		if (mode == 1) {
			// limpiar datos de estadísticas de jugadores
		} else if (mode == 2) {
			// limpiar datos de estadísticas de equipos
		} else if (mode == 3) {
			// limpiar datos de estadísticas de colegiados
		}
		limpiar();
	}

	@End
	public void menu(int mode) {
		if (mode == 1) {
			// limpiar datos de estadísticas de jugadores
		} else if (mode == 2) {
			// limpiar datos de estadísticas de equipos
		} else if (mode == 3) {
			// limpiar datos de estadísticas de colegiados
		}
		limpiar();
	}

	private void limpiar() {

	}

	/*
	 * getters and setters
	 */

	/**
	 * 
	 * @return
	 */
	public Temporada getTemporada() {
		return temporada;
	}

	/**
	 * 
	 * @param temporada
	 */
	public void setTemporada(Temporada temporada) {
		this.temporada = temporada;
	}

	/**
	 * 
	 * @return
	 */
	public int getMode() {
		return mode;
	}

	/**
	 * 
	 * @param mode
	 */
	public void setMode(int mode) {
		this.mode = mode;
	}

	/**
	 * 
	 * @return
	 */
	public EstJugador getPichichi() {
		return pichichi;
	}

	/**
	 * 
	 * @param pichichi
	 */
	public void setPichichi(EstJugador pichichi) {
		this.pichichi = pichichi;
	}

	/**
	 * 
	 * @return
	 */
	public List<EstJugador> getListGoleadores() {
		return listGoleadores;
	}

	/**
	 * 
	 * @param listGoleadores
	 */
	public void setListGoleadores(List<EstJugador> listGoleadores) {
		this.listGoleadores = listGoleadores;
	}

	/**
	 * 
	 * @return
	 */
	public EstJugador getZamora() {
		return zamora;
	}

	/**
	 * 
	 * @param zamora
	 */
	public void setZamora(EstJugador zamora) {
		this.zamora = zamora;
	}

	/**
	 * 
	 * @return
	 */
	public List<EstJugador> getListGoleados() {
		return listGoleados;
	}

	/**
	 * 
	 * @param listGoleados
	 */
	public void setListGoleados(List<EstJugador> listGoleados) {
		this.listGoleados = listGoleados;
	}

	/**
	 * 
	 * @return
	 */
	public EstJugador getJugMasFaltas() {
		return jugMasFaltas;
	}

	/**
	 * 
	 * @param jugMasFaltas
	 */
	public void setJugMasFaltas(EstJugador jugMasFaltas) {
		this.jugMasFaltas = jugMasFaltas;
	}

	/**
	 * 
	 * @return
	 */
	public List<EstJugador> getListFaltas() {
		return listFaltas;
	}

	/**
	 * 
	 * @param listFaltas
	 */
	public void setListFaltas(List<EstJugador> listFaltas) {
		this.listFaltas = listFaltas;
	}

	/**
	 * 
	 * @return
	 */
	public List<EstJugador> getListAmonestadosAmarilla() {
		return listAmonestadosAmarilla;
	}

	/**
	 * 
	 * @param listAmonestadosAmarilla
	 */
	public void setListAmonestadosAmarilla(
			List<EstJugador> listAmonestadosAmarilla) {
		this.listAmonestadosAmarilla = listAmonestadosAmarilla;
	}

	/**
	 * 
	 * @return
	 */
	public EstJugador getJugMasAmarillas() {
		return jugMasAmarillas;
	}

	/**
	 * 
	 * @param jugMasAmarillas
	 */
	public void setJugMasAmarillas(EstJugador jugMasAmarillas) {
		this.jugMasAmarillas = jugMasAmarillas;
	}

	/**
	 * 
	 * @return
	 */
	public List<EstJugador> getListAmonestadosRoja() {
		return listAmonestadosRoja;
	}

	/**
	 * 
	 * @param listAmonestadosRoja
	 */
	public void setListAmonestadosRoja(List<EstJugador> listAmonestadosRoja) {
		this.listAmonestadosRoja = listAmonestadosRoja;
	}

	/**
	 * 
	 * @return
	 */
	public EstJugador getJugMasRojas() {
		return jugMasRojas;
	}

	/**
	 * 
	 * @param jugMasRojas
	 */
	public void setJugMasRojas(EstJugador jugMasRojas) {
		this.jugMasRojas = jugMasRojas;
	}

	/**
	 * 
	 * @return
	 */
	public List<EstJugador> getListAmonestadosAzul() {
		return listAmonestadosAzul;
	}

	/**
	 * 
	 * @param listAmonestadosAzul
	 */
	public void setListAmonestadosAzul(List<EstJugador> listAmonestadosAzul) {
		this.listAmonestadosAzul = listAmonestadosAzul;
	}

	/**
	 * 
	 * @return
	 */
	public EstJugador getJugMasAzules() {
		return jugMasAzules;
	}

	/**
	 * 
	 * @param jugMasAzules
	 */
	public void setJugMasAzules(EstJugador jugMasAzules) {
		this.jugMasAzules = jugMasAzules;
	}

	/**
	 * 
	 * @return
	 */
	public EstJugador getJugMasPenaltysC() {
		return jugMasPenaltysC;
	}

	/**
	 * 
	 * @param jugMasPenaltysC
	 */
	public void setJugMasPenaltysC(EstJugador jugMasPenaltysC) {
		this.jugMasPenaltysC = jugMasPenaltysC;
	}

	/**
	 * 
	 * @return
	 */
	public List<EstJugador> getListPenaltysC() {
		return listPenaltysC;
	}

	/**
	 * 
	 * @param listPenaltysC
	 */
	public void setListPenaltysC(List<EstJugador> listPenaltysC) {
		this.listPenaltysC = listPenaltysC;
	}

	/**
	 * 
	 * @return
	 */
	public EstJugador getJugMasPenaltysL() {
		return jugMasPenaltysL;
	}

	/**
	 * 
	 * @return
	 */
	public List<EstJugador> getListPenaltysL() {
		return listPenaltysL;
	}

	/**
	 * 
	 * @param listPenaltysL
	 */
	public void setListPenaltysL(List<EstJugador> listPenaltysL) {
		this.listPenaltysL = listPenaltysL;
	}

	/**
	 * 
	 * @return
	 */
	public List<Temporada> getListaTemporadas() {
		if (listaTemporadas == null) {
			listaTemporadas = temporadaService.getList();
		}
		return listaTemporadas;
	}

	/**
	 * 
	 * @param listaTemporadas
	 */
	public void setListaTemporadas(List<Temporada> listaTemporadas) {
		this.listaTemporadas = listaTemporadas;
	}

	/**
	 * 
	 * @return
	 */
	public EstEquipo getEqPichichi() {
		return eqPichichi;
	}

	/**
	 * 
	 * @param eqPichichi
	 */
	public void setEqPichichi(EstEquipo eqPichichi) {
		this.eqPichichi = eqPichichi;
	}

	/**
	 * 
	 * @return
	 */
	public List<EstEquipo> getListEqGoleadores() {
		return listEqGoleadores;
	}

	/**
	 * 
	 * @param listEqGoleadores
	 */
	public void setListEqGoleadores(List<EstEquipo> listEqGoleadores) {
		this.listEqGoleadores = listEqGoleadores;
	}

	/**
	 * 
	 * @return
	 */
	public EstEquipo getEqZamora() {
		return eqZamora;
	}

	/**
	 * 
	 * @param eqZamora
	 */
	public void setEqZamora(EstEquipo eqZamora) {
		this.eqZamora = eqZamora;
	}

	/**
	 * 
	 * @return
	 */
	public List<EstEquipo> getListEqGoleados() {
		return listEqGoleados;
	}

	/**
	 * 
	 * @param listEqGoleados
	 */
	public void setListEqGoleados(List<EstEquipo> listEqGoleados) {
		this.listEqGoleados = listEqGoleados;
	}

	/**
	 * 
	 * @return
	 */
	public EstEquipo getEqFatasR() {
		return eqFatasR;
	}

	/**
	 * 
	 * @param eqFatasR
	 */
	public void setEqFatasR(EstEquipo eqFatasR) {
		this.eqFatasR = eqFatasR;
	}

	/**
	 * 
	 * @return
	 */
	public List<EstEquipo> getListEqFaltasR() {
		return listEqFaltasR;
	}

	/**
	 * 
	 * @param listEqFaltasR
	 */
	public void setListEqFaltasR(List<EstEquipo> listEqFaltasR) {
		this.listEqFaltasR = listEqFaltasR;
	}

	/**
	 * 
	 * @return
	 */
	public EstEquipo getEqFaltasC() {
		return eqFaltasC;
	}

	/**
	 * 
	 * @param eqFaltasC
	 */
	public void setEqFaltasC(EstEquipo eqFaltasC) {
		this.eqFaltasC = eqFaltasC;
	}

	/**
	 * 
	 * @return
	 */
	public List<EstEquipo> getListEqFaltasC() {
		return listEqFaltasC;
	}

	/**
	 * 
	 * @param listEqFaltasC
	 */
	public void setListEqFaltasC(List<EstEquipo> listEqFaltasC) {
		this.listEqFaltasC = listEqFaltasC;
	}

	/**
	 * 
	 * @return
	 */
	public EstEquipo getEqMasAmarillas() {
		return eqMasAmarillas;
	}

	/**
	 * 
	 * @param eqMasAmarillas
	 */
	public void setEqMasAmarillas(EstEquipo eqMasAmarillas) {
		this.eqMasAmarillas = eqMasAmarillas;
	}

	/**
	 * 
	 * @return
	 */
	public List<EstEquipo> getListEqAmonestadosAmarilla() {
		return listEqAmonestadosAmarilla;
	}

	/**
	 * 
	 * @param listEqAmonestadosAmarilla
	 */
	public void setListEqAmonestadosAmarilla(
			List<EstEquipo> listEqAmonestadosAmarilla) {
		this.listEqAmonestadosAmarilla = listEqAmonestadosAmarilla;
	}

	/**
	 * 
	 * @return
	 */
	public EstEquipo getEqMasRojas() {
		return eqMasRojas;
	}

	/**
	 * 
	 * @param eqMasRojas
	 */
	public void setEqMasRojas(EstEquipo eqMasRojas) {
		this.eqMasRojas = eqMasRojas;
	}

	/**
	 * 
	 * @return
	 */
	public List<EstEquipo> getListEqAmonestadosRoja() {
		return listEqAmonestadosRoja;
	}

	/**
	 * 
	 * @param listEqAmonestadosRoja
	 */
	public void setListEqAmonestadosRoja(List<EstEquipo> listEqAmonestadosRoja) {
		this.listEqAmonestadosRoja = listEqAmonestadosRoja;
	}

	/**
	 * 
	 * @return
	 */
	public EstEquipo getEqMasAzul() {
		return eqMasAzul;
	}

	/**
	 * 
	 * @param eqMasAzul
	 */
	public void setEqMasAzul(EstEquipo eqMasAzul) {
		this.eqMasAzul = eqMasAzul;
	}

	/**
	 * 
	 * @return
	 */
	public List<EstEquipo> getListEqAmonestadosAzul() {
		return listEqAmonestadosAzul;
	}

	/**
	 * 
	 * @param listEqAmonestadosAzul
	 */
	public void setListEqAmonestadosAzul(List<EstEquipo> listEqAmonestadosAzul) {
		this.listEqAmonestadosAzul = listEqAmonestadosAzul;
	}

	/**
	 * 
	 * @return
	 */
	public EstEquipo getEqMasPenaltysC() {
		return eqMasPenaltysC;
	}

	/**
	 * 
	 * @param eqMasPenaltysC
	 */
	public void setEqMasPenaltysC(EstEquipo eqMasPenaltysC) {
		this.eqMasPenaltysC = eqMasPenaltysC;
	}

	/**
	 * 
	 * @return
	 */
	public List<EstEquipo> getListEqPenaltysC() {
		return listEqPenaltysC;
	}

	/**
	 * 
	 * @param listEqPenaltysC
	 */
	public void setListEqPenaltysC(List<EstEquipo> listEqPenaltysC) {
		this.listEqPenaltysC = listEqPenaltysC;
	}

	/**
	 * 
	 * @return
	 */
	public EstEquipo getEqMasPenaltysL() {
		return eqMasPenaltysL;
	}

	/**
	 * 
	 * @param eqMasPenaltysL
	 */
	public void setEqMasPenaltysL(EstEquipo eqMasPenaltysL) {
		this.eqMasPenaltysL = eqMasPenaltysL;
	}

	/**
	 * 
	 * @return
	 */
	public List<EstEquipo> getListEqPenaltysL() {
		return listEqPenaltysL;
	}

	/**
	 * 
	 * @param listEqPenaltysL
	 */
	public void setListEqPenaltysL(List<EstEquipo> listEqPenaltysL) {
		this.listEqPenaltysL = listEqPenaltysL;
	}

	/**
	 * 
	 * @param jugMasPenaltysL
	 */
	public void setJugMasPenaltysL(EstJugador jugMasPenaltysL) {
		this.jugMasPenaltysL = jugMasPenaltysL;
	}
}
